#ifndef WORLDFACTORY_H_
#define WORLDFACTORY_H_

#include "common.h"

#include "math/math.h"
#include "WorldModel.h"
#include "../include/SpatialPartitioningType.h"
#include "../include/spatial_partitioning/NullSpatialPartitioningConfig.h"
#include "../include/spatial_partitioning/UniformGridConfig.h"
#include "utils/Singleton.h"
#include <list>

namespace physicsworks {

using math::vec3;

class WorldFactory : public Singleton<WorldFactory> {
	friend class Singleton<WorldFactory>;

public:
	using Singleton<WorldFactory>::instance;
	
	WorldModel* instance(const vec3& a, const vec3& b, SpatialPartitioningType s, const SpatialPartitioningConfig& sc);

private:
	WorldFactory() : Singleton<WorldFactory>() {}
	~WorldFactory() {}
	WorldFactory(const WorldFactory&);
	WorldFactory& operator = (const WorldFactory&);
};

}

#endif /*WORLDFACTORY_H_*/
